<?php

require_once 'Framework/Controleur.php';
require_once 'Modele/Utilisateur.php';

class ControleurCompte extends Controleur {

    private $modUtilisateur;
    
    public function __construct() {
        $this->modUtilisateur = new Utilisateur();
    }

    // Page inexistante
    public function index() {
        throw new Exception('Page introuvable !');
    }
    
    // Page de connexion
    public function connexion() {
        
        // Si le formulaire a été posté
        if (isset($_POST["submited"])) {
            
            // On créer les REGEX
            $listeChampInscription = array(
                'mail_etu' => array(
                    'val' => '',
                    'regex' => '#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',
                    'obligatory' => true
                ),
                'password1' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => true
                )
            );
            
            // Vérifications des infos envoyées
            $liste_erreurs = array();
            foreach ($listeChampInscription as $key => $value) {
                $listeChampInscription[$key]['val'] = stripslashes($_POST[$key]);
                $listeChampInscription[$key]['val'] = addslashes($listeChampInscription[$key]['val']);

                if (isset($value['regex'])) {
                    // Traitement des regex sauf password
                    if (strlen($listeChampInscription[$key]['regex']) != 0) {
                        if (strlen($_POST[$key]) != 0) {
                            if (preg_match($value['regex'], $_POST[$key]) <= 0) {
                                $liste_erreurs[$key] = "Erreur Connexion sur :" . $key;
                            }
                        } else {
                            if ($value['obligatory']) {
                                $liste_erreurs[$key] = "Champs obligatoire :" . $key;
                            }
                        }
                    }
                }
            }
            
            // Si il n'y a pas d'erreur, one check le compte
            if(count($liste_erreurs) == 0) {
                
                $user = $this->modUtilisateur->getUtilisateur(
                        $listeChampInscription['mail_etu']['val'],
                        $listeChampInscription['password1']['val']);
                
                // S'il n'existe pas, on créer une erreur
                if(empty($user)) {
                    $liste_erreurs["Compte"] = "Vérifiez votre email et votre mot de passe !";
                    unset($_SESSION['utilisateur']);
                }
                
                // Sinon, on logge le gars
                else {
                    $_SESSION["utilisateur"] = $user;
                }
            }
            
            // Si la vérifcation a réussie, on enregistre le compte
            if(count($liste_erreurs) == 0) {
                //$this->modUtilisateur->insertUtilisateur($listeChampInscription);
                $data = array('statut' => 'valide');
            }
            
            // Sinon, on notifie l'utilisateur qu'il y a une erreur
            else {
                $data = array('statut' => 'erreur',
                              'liste_erreurs' => $liste_erreurs);
            }
        }
        
        // Sinon  on affiche le formulaire
        else  {
            $data = array('statut' => 'formulaire');
        }
        
        // On retourne la vue
        $this->genererVue($data);
    }
    
    // Page d'inscription
    public function inscription() {
        
        // Si des informations ont étés postées
        if (isset($_POST["submited"])) {
            
            // On rempli la vérifcation des champs d'inscriptions
            $listeChampInscription = array(
                'nom' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => true
                ),
                'prenom' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => true
                ),
                'adresse1' => array(
                    'val' => '',
                    'regex' => '',
                    'obligatory' => false
                ),
                'adresse2' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => false
                ),
                'cp' => array(
                    'val' => '',
                    'regex' => '/^[0-9]{5}/',
                    'obligatory' => false
                ),
                'ville' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => false
                ),
                'telephone' => array(
                    'val' => '',
                    'regex' => '#^\+{0,1}[1-9]{0,1}[0-9]+$#',
                    'obligatory' => false
                ),
                'mail_etu' => array(
                    'val' => '',
                    'regex' => '#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',
                    'obligatory' => true
                ),
                'mail_perso' => array(
                    'val' => '',
                    'regex' => '#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',
                    'obligatory' => false
                ),
                'password1' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => true
                ),
                'password2' => array(
                    'val' => '',
                    'regex' => '#^[a-zA-Z -\'éçâêîôûäëïöüÿàèìòùãõñ]+$#',
                    'obligatory' => true
                )
            );
        
            // Vérifications des infos envoyées
            $liste_erreurs = array();

            foreach ($listeChampInscription as $key => $value) {
                $listeChampInscription[$key]['val'] = stripslashes($_POST[$key]);
                $listeChampInscription[$key]['val'] = addslashes($listeChampInscription[$key]['val']);

                if (isset($value['regex'])) {
                    // Traitement des regex sauf password
                    if (strlen($listeChampInscription[$key]['regex']) != 0) {
                        if (strlen($_POST[$key]) != 0) {
                            if (preg_match($value['regex'], $_POST[$key]) <= 0) {
                                $liste_erreurs[$key] = "Erreur Inscription sur :" . $key;
                            }
                        } else {
                            if ($value['obligatory']) {
                                $liste_erreurs[$key] = "Champs obligatoire :" . $key;
                            }
                        }
                    }
                }
                if ($key == 'password2') {
                    if ($listeChampInscription[$key]['val'] != $listeChampInscription['password1']['val']) {
                        $liste_erreurs['Coherence'.$key] = "Erreur sur les mots de passe";
                    }
                }
            }
            
            // Si la vérifcation a réussie, on enregistre le compte
            if(count($liste_erreurs) == 0) {
                $this->modUtilisateur->insertUtilisateur($listeChampInscription);
                $data = array('statut' => 'valide');
            }
            
            // Sinon, on notifie l'utilisateur qu'il y a une erreur
            else {
                $data = array('statut' => 'erreur',
                              'liste_erreurs' => $liste_erreurs);
            }
        }
        
        // Sinon  on affiche le formulaire
        else  {
            $data = array('statut' => 'formulaire');
        }
        
        // On retourne la vue
        $this->genererVue($data);
    }

}